# 第3节 火柴棍等式
# 现在小哼有n根火柴棍，希望拼出形如A+B=C的等式。等式中的A、B、C均是用火柴棍拼出来的整数（若该数非零，则最高位不能是0)。
# 最多只有24根火柴，+和=占用4，还剩20根，0-9数字中1需要的火柴数最少，2根，最多拼成10个1，A+B=C任意一个数都不能超过1111
# 题目：小哼手上有m根(m<=24)火柴棍，那么小哼究竟可以拼出多少种不同形如A+B=C的形式呢？
# 规定时限是1秒。
# 思路：最简单的方法即为枚举法,A、B、C的枚举范围是0~1111。因为题目中最多只有24根火柴棍即m<=24。除去+和=占用的四根火柴还剩
# 20根火柴，而0~9这10个数字中，数字1使用的火柴棍最少，只需要两根火柴而10根火柴棍最多能组成10个1，故A、B、C三个数每个数都
# 不能超过1111。
# 既然最多能组成10个1，我们还要枚举a和b，最极限的情况是a和b各分一半，也就是a是五个1，b也是五个1，那么任意一个数都不会超过11111
def fun(x: int) -> int:
    """计算数字需要的火柴根数"""
    num = 0
    # 记录0-9需要的火柴根数
    f = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]
    # x对10取整不是0说明至少有两位
    while x // 10 != 0:
        num += f[x % 10]  # 累计火柴根数
        x = x // 10
    # 最后加上此时需要的火柴根数
    num += f[x]
    return num


if __name__ == '__main__':
    print('测试')
    m = int(input("输入火柴的个数："))
    sum = 0  # 记录等式个数
    for a in range(0, 1112):
        for b in range(0, 1112):
            c = a + b
            if (fun(a) + fun(b) + fun(c)) == (m - 4):
                print('%d+%d=%d' % (a, b, c))
                sum += 1
    print('一共可以拼出%d个不同的等式' % sum)

